package com.bruce.ai.alibaba.workflow.config;

import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver;

@Configuration
public class AgentConfig {

    /**
     * 数据分析agent
     * @param chatModel
     * @return
     */
    @Bean
    public ReactAgent analysisAgent(ChatModel chatModel, @Qualifier("analysisTool") ToolCallback analysisTool) {
        return  ReactAgent.builder()
          .name("data_analyzer")
          .model(chatModel)
          .instruction("你是一个数据分析专家，负责分析数据并提供洞察")
          .tools(analysisTool)
          .build();

    }


    /**
     * 报告生成agent
     * @param chatModel
     * @return
     */
    @Bean 
    public ReactAgent reportAgent(ChatModel chatModel){
        return ReactAgent.builder()
          .name("report_generator")
          .model(chatModel)
          .instruction("你是一个报告生成专家，负责将分析结果转化为专业报告")
          .build();
    }



    /**
     * 问答agent
     * @param chatModel
     * @return
     */
    @Bean 
    public ReactAgent qaAgent(ChatModel chatModel){
        return ReactAgent.builder()
          .name("qa_agent")
          .model(chatModel)
          .instruction("你是一个问答专家")
          .saver(new MemorySaver())
          .build();
    }


     /**
      * 总结agent
      * @param chatModel
      * @return
      */
    @Bean 
    public ReactAgent summaryAgent(ChatModel chatModel, @Qualifier("summaryTool") ToolCallback summaryTool, @Qualifier("normalizeMessagesTool") ToolCallback normalizeMessagesTool){
        return ReactAgent.builder()
          .name("summary")
          .model(chatModel)
          .instruction("你是一个总结专家，负责将分析结果提炼为简洁明了的结论。必要时使用normalize_messages工具将单条AssistantMessage转换为messages列表。")
          .tools(summaryTool, normalizeMessagesTool)
          .build();
    }

    /**
      * 搜索agent
      * @param chatModel
      * @return
      */
    @Bean 
    public ReactAgent researchAgent(ChatModel chatModel, @Qualifier("searchTool") ToolCallback searchTool){
        return ReactAgent.builder()
          .name("research")
          .model(chatModel)
          .instruction("你是一个搜索专家，负责搜索文本内容")
          .tools(searchTool)
          .build();
    }



}
